﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml.Linq;
using com.creditos.util.liclUtil;
using com.creditos.be.liclUtil;
using liclSolcred.Views;
using com.creditos.be.liclEntities;
using com.creditos.be.liclBases;
using com.creditos.be.liclSolcred;
using LiclBases.Views;
using LiclBases;

public partial class solcred_popups_FormsPopupReglasCentralRiesgo : CreditosPaseBase, IFormsManReglasCentralRiesgoView
{
    private FormsManReglasCentralRiesgoPresenter _presenter = new FormsManReglasCentralRiesgoPresenter();     
    protected void Page_Load(object sender, EventArgs e)
    {
        Response.Expires = 0;
        Response.CacheControl = "no-cache";
        Page.Header.Controls.Add(new LiteralControl(@"<base target=""_self"" />"));

        if (!this.IsPostBack)
        {            
            _presenter.View = this;
            _presenter.LoadPopupRegla();
            ListaCondiciones.Clear();
            ListaReglas.Clear();
            btnEliminar.Enabled = false;
            if (int.Parse((string)Session["strAccionRegla"]) == 2)
            {
                btnAgregar.Visible = false;
                btnAceptar.Visible = true;
                ReglaCentralRiesgo oReglaCentral = new ReglaCentralRiesgo();
                oReglaCentral.Accion = 2;
                oReglaCentral.CodigoPlantilla = int.Parse((string)Session["CodigoPlantilla"]);
                oReglaCentral.CodigoReglaNegocio = int.Parse((string)Session["strCodigoRegla"]);
                _presenter.ObtenerReglaNegocio(oReglaCentral);

                oReglaCentral.CodigoTipoIntegrante = int.Parse((string)Session["CodigoIntegrante"]);
                oReglaCentral.Accion = 1;
                AccionTres = "1";
                _presenter.ObtenerReglaNegocioCondicion(oReglaCentral);

                pnlCondiciones.Enabled = false;
                

            }
            else {
                pnlCondiciones.Enabled = true;                
                btnAgregar.Visible = true;
            }
        }
        _presenter.View = this;
    }

    protected override void DefineHandlers()
    {
        btnAgregar.Click += new EventHandler(btnAgregar_Click);
        btnAceptar.Click += new EventHandler(btnAceptar_Click);
        btnCancelar.Click += new EventHandler(btnCancelar_Click);
        btnEliminar.Click += new EventHandler(btnEliminar_Click);
        gvwCondicionesSeleccionar.SelectedIndexChanged += new EventHandler(gvwCondicionesSeleccionar_SelectedIndexChanged);
    }

    void btnAgregar_Click(object sender, EventArgs e)
    {
        if (ListaReglas.Count == 0)
        {
            ReglaCentralRiesgo oReglas = new ReglaCentralRiesgo();
            oReglas.CodigoTipoIntegrante = int.Parse(ddlTipoIntegrante.SelectedValue);
            oReglas.DescripcionTipoIntegrante = ddlTipoIntegrante.SelectedItem.Text.Trim();
            oReglas.CodigoReglaNegocio = CodigoRegla;
            oReglas.DescripcionReglaNegocio = txtDescripcionRegla.Text.Trim();
            oReglas.CodigoPeriodoEvaluacion = int.Parse(ddlPeriodo.SelectedValue);
            oReglas.DescripcionPeriodoEvaluacion = ddlPeriodo.SelectedItem.Text.Trim();            
            oReglas.CodigoResultado = int.Parse(ddlResultado.SelectedValue);
            oReglas.DescripcionResultado = ddlResultado.SelectedItem.Text.Trim();
            oReglas.CodigoTipoVariable = int.Parse(ddlTipoVariable.SelectedValue);
            oReglas.DescripcionTipoVariable = ddlTipoVariable.SelectedItem.Text.Trim();

            ListaReglas.Add(oReglas);
            ListaReglasTotal.Add(oReglas);
        }
        ReglaCentralRiesgo oCondiciones = new ReglaCentralRiesgo();
        oCondiciones.CodigoTipoIntegrante = int.Parse(ddlTipoIntegrante.SelectedValue);
        oCondiciones.CodigoReglaNegocio = CodigoRegla;
        oCondiciones.CodigoCondicion = gvwCondiciones.Rows.Count == 0 ? 1 : int.Parse(gvwCondiciones.Rows[gvwCondiciones.Rows.Count - 1].Cells[1].Text) + 1;
        oCondiciones.CodigoTipoVariable = int.Parse(ddlVariable.SelectedValue);
        oCondiciones.DescripcionTipoVariable = ddlVariable.SelectedItem.Text.Trim();
        oCondiciones.CodigoTipoOperadorLogico = int.Parse(ddlOperadorLogico.SelectedValue);
        oCondiciones.DescripcionTipoOperadorLogico = ddlOperadorLogico.SelectedItem.Text.Trim();
        oCondiciones.DescripcionValorComparacion = txtValorEvaluacion.Text.Trim();
        oCondiciones.Tipo_And_Or = int.Parse(ddlConector.SelectedValue);
        oCondiciones.DescripcionTipo_And_Or = ddlConector.SelectedItem.Text.Trim();
       
        ListaCondiciones.Add(oCondiciones);
        ListaCondicionesTotal.Add(oCondiciones);

        UIBindable.Bind(gvwCondiciones, ListaCondiciones);      
    }

    void btnEliminar_Click(object sender, EventArgs e)
    {
        ReglaCentralRiesgo oCondiciones = new ReglaCentralRiesgo();
        oCondiciones.Accion = 3;
        oCondiciones.CodigoPlantilla = int.Parse((string)Session["CodigoPlantilla"]);
        oCondiciones.CodigoTipoIntegrante = int.Parse((string)Session["CodigoIntegrante"]);
        oCondiciones.CodigoReglaNegocio = int.Parse((string)Session["strCodigoRegla"]);
        oCondiciones.CodigoCondicion = int.Parse(strCodigoCondicion);                

        _presenter.ActualizarReglaNegocioCondicion(oCondiciones);
        
        oCondiciones.Accion = 1;
        AccionTres = "1";
        _presenter.ObtenerReglaNegocioCondicion(oCondiciones);

    }

    void btnAceptar_Click(object sender, EventArgs e)
    {
        ReglaCentralRiesgo oReglas = new ReglaCentralRiesgo();
        oReglas.Accion = int.Parse(strAccionRegla);
        if (strAccionRegla == "1")
        {
            if (ListaReglasTotal.Count > 0 && ListaCondicionesTotal.Count > 0)
            {                

                for (int i = 0; i < ListaReglasTotal.Count; i++)
                {
                    if (CodigoRegla == 1)
                    {
                        ReglaCentralRiesgo oCabecera = new ReglaCentralRiesgo();
                        oCabecera.Accion = 1;
                        oCabecera.CodigoPlantilla = int.Parse(strCodigoPlantilla);
                        oCabecera.DescripcionPlantilla = strDescripcionPlantilla.ToUpper();
                        oCabecera.CodigoTipoPoliticaCredito = int.Parse(strCodigoTipoRegla);
                        oReglas.CodigoPlantilla = _presenter.ActualizarPoliticaCredito(oCabecera);
                        strCodigoPlantilla = oReglas.CodigoPlantilla.ToString();
                    }
                    else
                    {
                        oReglas.CodigoPlantilla = int.Parse(strCodigoPlantilla);
                    }
                    oReglas.CodigoTipoIntegrante = ListaReglasTotal[i].CodigoTipoIntegrante;
                    oReglas.CodigoReglaNegocio = ListaReglasTotal[i].CodigoReglaNegocio;
                    oReglas.DescripcionReglaNegocio = ListaReglasTotal[i].DescripcionReglaNegocio.ToUpper();
                    oReglas.CodigoTipoVariable = ListaReglasTotal[i].CodigoTipoVariable;
                    oReglas.CodigoResultado = ListaReglasTotal[i].CodigoResultado;
                    oReglas.CodigoUsuarioRegistro = 1;
                    _presenter.ActualizarReglaNegocio(oReglas);
                }

                for (int i = 0; i < ListaCondicionesTotal.Count; i++)
                {
                    ReglaCentralRiesgo oCondiciones = new ReglaCentralRiesgo();
                    oCondiciones.Accion = int.Parse(strAccionRegla);
                    oCondiciones.CodigoPlantilla = int.Parse(strCodigoPlantilla);
                    oCondiciones.CodigoTipoIntegrante = ListaCondicionesTotal[i].CodigoTipoIntegrante;
                    oCondiciones.CodigoReglaNegocio = ListaCondicionesTotal[i].CodigoReglaNegocio;
                    oCondiciones.CodigoCondicion = ListaCondicionesTotal[i].CodigoCondicion;
                    oCondiciones.CodigoTipoVariable = ListaCondicionesTotal[i].CodigoTipoVariable;
                    oCondiciones.CodigoTipoOperadorLogico = ListaCondicionesTotal[i].CodigoTipoOperadorLogico;
                    oCondiciones.DescripcionValorComparacion = ListaCondicionesTotal[i].DescripcionValorComparacion;
                    oCondiciones.Tipo_And_Or = ListaCondicionesTotal[i].Tipo_And_Or;
                    oCondiciones.CodigoUsuarioRegistro = 1;
                    _presenter.ActualizarReglaNegocioCondicion(oCondiciones);
                }

               
                oReglas.Accion = 2;              
                _presenter.ObtenerReglaNegocio(oReglas);
                oReglas.Accion = 1;
                AccionTres = "1";
                _presenter.ObtenerReglaNegocioCondicion(oReglas);

                lblMensaje.Text = "Se registró exitosamente";
                
            }
            else
            {
                lblMensaje.Text = "Debe agregar reglas y condiciones....";
                
            }

        }
        else
        {


            ReglaCentralRiesgo oCabecera = new ReglaCentralRiesgo();
            oCabecera.Accion = 2;
            oCabecera.CodigoPlantilla = int.Parse(strCodigoPlantilla);
            oCabecera.DescripcionPlantilla = strDescripcionPlantilla.ToUpper();
            oCabecera.CodigoTipoPoliticaCredito = int.Parse(strCodigoTipoRegla);
            _presenter.ActualizarPoliticaCredito(oCabecera);

            oReglas.CodigoPlantilla = int.Parse((string)Session["CodigoPlantilla"]);
            oReglas.CodigoTipoIntegrante = int.Parse((string)Session["CodigoIntegrante"]);
            oReglas.CodigoReglaNegocio = oReglas.CodigoReglaNegocio = int.Parse((string)Session["strCodigoRegla"]);
            oReglas.CodigoUsuarioRegistro = 1;
            oReglas.CodigoResultado = int.Parse(ddlResultado.SelectedValue);
            oReglas.CodigoTipoVariable = int.Parse(ddlTipoVariable.SelectedValue);
            oReglas.DescripcionReglaNegocio = txtDescripcionRegla.Text.Trim().ToUpper();
            _presenter.ActualizarReglaNegocio(oReglas);

            if (pnlCondiciones.Enabled == true)
            {
                ReglaCentralRiesgo oCondiciones = new ReglaCentralRiesgo();
                oCondiciones.Accion = int.Parse(strAccionRegla);
                oCondiciones.CodigoPlantilla = int.Parse((string)Session["CodigoPlantilla"]);
                oCondiciones.CodigoTipoIntegrante = int.Parse((string)Session["CodigoIntegrante"]);
                oCondiciones.CodigoReglaNegocio = oCondiciones.CodigoReglaNegocio = int.Parse((string)Session["strCodigoRegla"]);
                oCondiciones.CodigoCondicion = gvwCondicionesSeleccionar.Rows.Count == 0 ? 1 : int.Parse(gvwCondicionesSeleccionar.SelectedRow.Cells[2].Text);
                oCondiciones.CodigoTipoVariable = int.Parse(ddlVariable.SelectedValue);
                oCondiciones.CodigoTipoOperadorLogico = int.Parse(ddlOperadorLogico.SelectedValue);
                oCondiciones.DescripcionValorComparacion = txtValorEvaluacion.Text.Trim();
                oCondiciones.Tipo_And_Or = int.Parse(ddlConector.SelectedValue);
                oCondiciones.CodigoUsuarioRegistro = 1;

                _presenter.ActualizarReglaNegocioCondicion(oCondiciones);
            }

            ReglaCentralRiesgo oReglaCentral = new ReglaCentralRiesgo();
            oReglaCentral.Accion = 2;
            oReglaCentral.CodigoPlantilla = int.Parse((string)Session["CodigoPlantilla"]);
            oReglaCentral.CodigoReglaNegocio = int.Parse((string)Session["strCodigoRegla"]);
            _presenter.ObtenerReglaNegocio(oReglaCentral);

            oReglaCentral.CodigoTipoIntegrante = int.Parse((string)Session["CodigoIntegrante"]);
            oReglaCentral.Accion = 1;
            AccionTres = "1";
            _presenter.ObtenerReglaNegocioCondicion(oReglaCentral);

            lblMensaje.Text = "Se realizó la modificación exitosamente";
        }
    }

    void btnCancelar_Click(object sender, EventArgs e)
    {
        btnCancelar.Attributes.Add("OnClick", "window.close();");
    }

    protected void gvwCondicionesSeleccionar_SelectedIndexChanged(object sender, EventArgs e)
    {
        btnAceptar.Enabled = true;
        pnlCondiciones.Enabled = true;
        if (gvwCondicionesSeleccionar.Rows.Count > 0)
        {
            btnEliminar.Enabled = true;
            GridViewRow row = gvwCondicionesSeleccionar.SelectedRow;

            ReglaCentralRiesgo oReglaCentral = new ReglaCentralRiesgo();
            oReglaCentral.Accion = 3;
            AccionTres = "3";            
            oReglaCentral.CodigoPlantilla = int.Parse((string)Session["CodigoPlantilla"]);
            oReglaCentral.CodigoTipoIntegrante = int.Parse((string)Session["CodigoIntegrante"]);
            oReglaCentral.CodigoReglaNegocio = int.Parse((string)Session["strCodigoRegla"]);
            oReglaCentral.CodigoCondicion = int.Parse(row.Cells[2].Text);
            strCodigoCondicion = oReglaCentral.CodigoCondicion.ToString();
            _presenter.ObtenerReglaNegocioCondicion(oReglaCentral);
        }
    }

    #region IFormsManReglasCentralRiesgoView Members

    public void ObtenerPoliticaCredito(List<ReglaCentralRiesgo> lst)
    {
        //throw new NotImplementedException();
    }

    public void MostrarMensajeError(string p)
    {
        //Master.MostrarMensaje(p, 0);
    }

    public void CargarParametros(List<ParametroBE> lstParametro)
    {
        if (lstParametro.Count > 0)
        {
            switch (lstParametro[0].CodigoTabla)
            {
                case 973:
                    UIBindable.Bind(ddlTipoIntegrante, lstParametro);
                    break;
                case 888:
                    UIBindable.Bind(ddlPeriodo, lstParametro);
                    break;
                case 983:
                    UIBindable.Bind(ddlResultado, lstParametro);
                    break;
                case 230:
                    UIBindable.Bind(ddlOperadorLogico, lstParametro);
                    break;
                case 981:
                    UIBindable.Bind(ddlConector, lstParametro);
                    break;
                case 968:
                    UIBindable.Bind(ddlTipoVariable, lstParametro);
                    break;
            }
        }
    }

    public void CargarVariables(List<ReglaCentralRiesgo> lstVariable)
    {
        UIBindable.Bind(ddlVariable, lstVariable, "CodigoTipoVariable", "DescripcionTipoVariable");
    }

    public void ObtenerPoliticaCreditoCabecera(List<CentralRiesgoBE> lst)
    {
        throw new NotImplementedException();
    }

    public void ObtenerReglaNegocio(List<ReglaCentralRiesgo> lst)
    {
        if (int.Parse((string)Session["strAccionRegla"]) == 2)
        {
            if (lst.Count > 0)
            {
                ddlTipoIntegrante.SelectedValue = lst[0].CodigoIntegranteRegla.ToString();
                txtDescripcionRegla.Text = lst[0].DescripcionReglaNegocio;
                ddlResultado.SelectedValue = lst[0].CodigoResultado.ToString();
                ddlTipoVariable.SelectedValue = lst[0].CodigoTipoVariable2.ToString();
            }
        }
        else
        {
            if (lst.Count > 0)
            {
                ddlTipoIntegrante.SelectedValue = lst[0].CodigoTipoIntegrante.ToString();
                txtDescripcionRegla.Text = lst[0].DescripcionReglaNegocio;
                ddlPeriodo.SelectedValue = lst[0].CodigoPeriodoEvaluacion.ToString();
                ddlResultado.SelectedValue = lst[0].CodigoResultado.ToString();
                ddlTipoVariable.SelectedValue = lst[0].CodigoTipoVariable.ToString();
            }
        }
    }

    public void ObtenerReglaNegocioCondicion(List<ReglaCentralRiesgo> lst)
    {
        if (lst.Count > 0) {
            if (int.Parse((string)Session["strAccionRegla"]) == 2 && int.Parse((string)Session["AccionTres"]) !=3)
            {
                UIBindable.Bind(gvwCondicionesSeleccionar, lst);
            }
            ddlVariable.SelectedValue = lst[0].CodTipoVariableCondicion.ToString();
            ddlOperadorLogico.SelectedValue = lst[0].CodigoTipoOperadorLogico.ToString();
            txtValorEvaluacion.Text = lst[0].DescripcionValorComparacion;
            ddlConector.SelectedValue = lst[0].Tipo_And_Or.ToString();
        }
    }

    #endregion

    public List<ReglaCentralRiesgo> ListaCondiciones
    {
        get
        {
            if (Session["ListaCondiciones"] == null)
            {
                Session["ListaCondiciones"] = new List<ReglaCentralRiesgo>();
            }
            return (List<ReglaCentralRiesgo>)Session["ListaCondiciones"];
        }
        set { Session["ListaCondiciones"] = value; }

    }
    public List<ReglaCentralRiesgo> ListaReglas
    {
        get
        {
            if (Session["ListaReglas"] == null)
            {
                Session["ListaReglas"] = new List<ReglaCentralRiesgo>();
            }
            return (List<ReglaCentralRiesgo>)Session["ListaReglas"];
        }
        set { Session["ListaReglas"] = value; }

    }
    public List<ReglaCentralRiesgo> ListaReglasTotal
    {
        get
        {
            if (Session["ListaReglasTotal"] == null)
            {
                Session["ListaReglasTotal"] = new List<ReglaCentralRiesgo>();
            }
            return (List<ReglaCentralRiesgo>)Session["ListaReglasTotal"];
        }
        set { Session["ListaReglasTotal"] = value; }

    }
    public List<ReglaCentralRiesgo> ListaCondicionesTotal
    {
        get
        {
            if (Session["ListaCondicionesTotal"] == null)
            {
                Session["ListaCondicionesTotal"] = new List<ReglaCentralRiesgo>();
            }
            return (List<ReglaCentralRiesgo>)Session["ListaCondicionesTotal"];
        }
        set { Session["ListaCondicionesTotal"] = value; }

    }
    public int CodigoRegla
    {
        get
        {
            return (int)Session["CodigoRegla"];
        }
        set { Session["CodigoRegla"] = value; }

    }
    public string AccionTres
    {
        get
        {
            return (string)Session["AccionTres"];
        }
        set { Session["AccionTres"] = value; }

    }
    public string strAccionRegla
    {
        get
        {
            return (string)Session["strAccionRegla"];
        }
        set { Session["strAccionRegla"] = value; }
    }
    public string strCodigoPlantilla
    {
        get
        {
            return (string)Session["CodigoPlantilla"];
        }
        set { Session["CodigoPlantilla"] = value; }
    }
    public string strDescripcionPlantilla
    {
        get
        {
            return (string)Session["strDescripcionPlantilla"];
        }
        set { Session["strDescripcionPlantilla"] = value; }
    }
    public string strCodigoTipoRegla
    {
        get { return (string)Session["CodigoTipoRegla"]; }
        set { Session["CodigoTipoRegla"] = value; }
    }
    public string strCodigoCondicion
    {
        get { return (string)Session["CodigoCondicion"]; }
        set { Session["CodigoCondicion"] = value; }
    }  
}
